﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace C_初级教程
{
    //重点：
        // ①、抽象类不能被实例化
        // ②、关键字是abstract
        // ③、override 方法： 父类实例化子类时，一定调用子类中重写的方法
        // ④、abstract 方法，在父类中没有实现体，只有在子类中被实现(重写)
        // ⑤、virtual 方法，表示可以被子类重写，可以重写，也可以不重写


    /// <summary>
    /// 抽象类
    /// 主要是用来定义子类的规范，一般子类较多的父类把它声明为抽象类
    /// </summary>
    public abstract class Anima5
    {
        //实例属性
        public string Name { get; set; }
        public int Age { set; get; }
        public string Color { get; set; }

        //静态属性
        public static string MyName { get; set; }

        //虚方法(有实现体)，为了让子类重写
        public virtual string Roar()
        {
            return "动物在叫";
        }

        //实例方法，子类不能重写，但可以用new关键字隐藏
        public string returnString()
        {
            return "我是返回的字符串";
        }

        //用来定义子类中方法的规范
        //抽象方法，在父类中一定不能实现，没有实现体，只能在子类重写(重写了，在调用时一定是调用子类)
        public abstract string Run();

        //★、被重写了的方法调用时一定调用的子类的方法

        /**
                虚方法(virtual)    ：    子类可以重写，也可以不重写，父类可以实现
                抽象方法(abstract) ：    父类不能实现，只能在子类实现。
         * */
    }
}
